Many organizations which distribute software, particularly commercial software vendors but also non-commercial software distributors, offer support services for customers or users of the software. Two traditional ways of offering support services are on-site support and telephone based technical support. However, these traditional avenues for providing support to users can often be expensive for the vendor, time-consuming for both the vendor and customer, and uncomfortable or inconvenient for the customer. Further, multiple users often encounter the same or similar problems with a particular software product. One way a software distributor can resolve these repetitive or commonly occurring problems is to make available a data store of solutions, such as a knowledge base. However, this solution is not always optimal, because a user may not know about the knowledge base, the user may not know how to effectively use the knowledge base, or may not have sufficient information by which to search the knowledge base.
Another way to resolve such customer problems is to train a sufficient number of human experts who provide personalized support for customer problems. However, human support experts are expensive, have different skill levels, and can require a significant investment in time to train. Further, human-provided support does not scale well, in that a call center, for example, encounters difficulty in meeting a need for significant additional capacity on short notice while still maintaining high quality of service.